# 2、注册和登录，要自己建user表，注册进来的密码要加密加盐
# 'select * from user where username="%s";' % username

#思路：

# 1、输入账号
# 2、输入密码和输入确认密码
# 3、最多循环3次
# 4、校验账号是否符合长度6-12，校验账号在数据库中是否存在
# 5、校验两次密码是否一次
# 6、校验密码长度8-12，密码必须包含大小写字母、数字
# 7、校验通过后，把账号密码写入数据库
import  pymysql
import hashlib
import string

#数据库信息
mysql_info={
    "host":"118.24.3.40",
    "user":"jxz",
    "password":"123456",
    "db":"jxz",
    "charset":"utf8",
    "autocommit":True
}

#执行sql函数
def execute_sql(sql,more=True,db_info=None):
    if db_info:
        conn=pymysql.connect(**db_info)
    else:
        conn=pymysql.connect(**mysql_info)
    cursor=conn.cursor(pymysql.cursors.DictCursor)
    cursor.execute(sql)
    if more:
        result=cursor.fetchall()
    else:
        result=cursor.fetchone()
    cursor.close()
    conn.close()
    return result




#注册模块==============================================================注册模块


# 创建表
sql="CREATE TABLE user_wxy (id int(11) NOT NULL AUTO_INCREMENT,name varchar(50) NOT NULL,password_md5 varchar(50) NOT NULL,password varchar(100) NOT NULL,PRIMARY KEY (id),UNIQUE KEY name (name));"
execute_sql(sql)

#校验密码函数
def check_password(password):
    return set(password)&set(string.ascii_uppercase) and set(password)&set(string.ascii_lowercase)\
           and set(password)&set(string.digits) and len(password)<=12 and len(password)>=8

count=0
while count<3:
    name=input("请输入注册账号:").strip()
    count+=1
    sql_name="select * from user_wxy where name='%s'" % name
    if len(name)>12  or len(name)<6:
        print("请输入6-12位账号")
        continue
    elif len(execute_sql(sql_name))!=0:#校验账号是否在数据库中存在
        print("账号重复")
        continue
    else:
        password=input("请输入注册密码:").strip()
        password_sure=input("请再次确认注册密码:").strip()
        if check_password(password): #如果密码和账号全部校验通过则插入数据库，注册成功
            password_md5=hashlib.md5(password.encode()).hexdigest()
            print(password_md5)
            insert_sql="insert into user_wxy (name,password_md5,password) values ('%s','%s','%s');"% (name,password_md5,password)
            execute_sql(insert_sql)
            print("注册成功")
            break
        elif password!=password_sure:
            print("两次密码不一致")
            continue
        else:
            print("密码长度8-12，密码必须包含大小写字母、数字")






#登录模块==============================================================登录模块

# 思路：
# 1、输入
# 2、判断账号是否存在数据库中
# 3、循环最多三次
# 4、判断账号和密码和数据库是否匹配
# 5、登录成功结束并返回当天日期

import time
count=0
while count<3: #循环3次
    enter_name=input("请输入账号：").strip()      #输入账号和密码
    enter_passwd=input("请输入密码：").strip()
    enter_passwd_md5 = hashlib.md5(enter_passwd.encode()).hexdigest() #把密码通过md5加密
    count+=1
    sql_name1="select * from user_wxy where name='%s'" % enter_name #查询账号的sql
    s = execute_sql(sql_name1)
    if len(enter_name)>12  or len(enter_name)<6 or len(enter_passwd)>12  or len(enter_passwd)<8:#判断账号输入校验
        print("请输入6-12位账号并且输入8-12位密码")
        continue
    if len(execute_sql(sql_name1))==0:   # 判断账号是否存在数据库
        print("账号不存在")
        continue
    if len(execute_sql(sql_name1))!=0 : #判断账号存在数据库且密码是否正确
        i = s[0]
        if enter_passwd_md5==i.get("password_md5"):
            time = time.strftime("%d/%m/%Y")
            print("欢迎%s登陆，今天的日期是%s" % (enter_name, time))  #登录成功返回
            break
        else:
            print("密码错误")
            continue
    else:
        print("账号密码不一致")
        continue

#WXYt123
#WXYT1wxy123